package com.exprecards.common.web;

import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.servlet.ServletContext;

import com.exprecards.common.enums.EEstadoPedido;
import com.exprecards.common.enums.ETipoParametro;
import com.exprecards.common.enums.ETipoUsuario;
import com.exprecards.common.persistence.DAOFactory;
import com.exprecards.common.persistence.dto.ExpTbPg;
import com.exprecards.common.persistence.exceptions.ExpTbEmpresaDaoException;
import com.exprecards.common.persistence.exceptions.ExpTbPgDaoException;
import com.exprecards.common.util.WebUtils;

@ManagedBean(name = "cacheParametrosBean")
@SessionScoped
public class CacheParametrosBean implements Serializable{

	private static final long serialVersionUID = 1L;
	
	private String pathContexto = "";
	private String pathArchivos = "";
	
	
    private static CacheParametrosBean instance;	
	
    // Para acceder desde clases
	public static synchronized CacheParametrosBean getInstance() {
		if( instance == null ) {
			instance = new CacheParametrosBean();
		}
		
		return instance;
	}
	
    
	// TODO: FALTA DEFINIR LA CARGA DE CACHE AL SELECCIONAR EPS / IPS
	private List<SelectItem> estadosPedidoList = null;
	private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
	private ExpTbPg [] tiposUsuarios = null; 
	private List<SelectItem> tiposUsuariosList = null;
	private List<SelectItem> estadosList = null;
	
	private List<SelectItem> empresaList = null; 
	
	

	public SimpleDateFormat getDateFormat() {
		return dateFormat;
	}


	public void setDateFormat(SimpleDateFormat dateFormat) {
		this.dateFormat = dateFormat;
	}


	public List<SelectItem> getEstadosPedidoList() {
		return estadosPedidoList;
	}


	public void setEstadosPedidoList(List<SelectItem> estadosPedidoList) {
		this.estadosPedidoList = estadosPedidoList;
	}

	@ManagedProperty("#{userSessionBean}")
	private UserSessionBean userSessionBean;
	
	public CacheParametrosBean(){
		
		//estados de pedidos
		estadosPedidoList = new ArrayList<SelectItem>();
		estadosPedidoList.add(new SelectItem("ALL", "TODOS"));
		estadosPedidoList.add(new SelectItem(EEstadoPedido.DIGITADO.getValue(), EEstadoPedido.DIGITADO.getDescripcion()));
		estadosPedidoList.add(new SelectItem(EEstadoPedido.TRAMITADO.getValue(), EEstadoPedido.TRAMITADO.getDescripcion()));
		estadosPedidoList.add(new SelectItem(EEstadoPedido.AUTORIZADO.getValue(), EEstadoPedido.AUTORIZADO.getDescripcion()));
		estadosPedidoList.add(new SelectItem(EEstadoPedido.DESPACHADO.getValue(), EEstadoPedido.DESPACHADO.getDescripcion()));
		estadosPedidoList.add(new SelectItem(EEstadoPedido.RECIBIDO.getValue(), EEstadoPedido.RECIBIDO.getDescripcion()));
		estadosPedidoList.add(new SelectItem(EEstadoPedido.CANCELADO.getValue(), EEstadoPedido.CANCELADO.getDescripcion()));
		
		//estados de activo/inactivo
		estadosList = new ArrayList<SelectItem>();
		estadosList.add(new SelectItem("A", "Activo"));
		estadosList.add(new SelectItem("I", "Inactivo"));
		
		try {
			tiposUsuarios = DAOFactory.getExpTbPgDao().findByExpTbTp(ETipoParametro.TIPO_USUARIO.getValue());
			tiposUsuariosList = WebUtils.createSelectItem(tiposUsuarios, false);
			
			empresaList = WebUtils.createSelectItem(DAOFactory.getExpTbEmpresaDao().findAll(), false); 
			
		} catch (ExpTbPgDaoException e) {
			e.printStackTrace();
		} catch (ExpTbEmpresaDaoException e) {
			e.printStackTrace();
		} 
		
		pathContexto = ((ServletContext) FacesContext
				.getCurrentInstance().getExternalContext().getContext())
				.getRealPath("/");
		
		pathArchivos = "resources/img/upload/";
	}



	public ETipoUsuario obtenerTipoUsuario(int id){
		
		ETipoUsuario result=null;
		
		for(int i=0;i<tiposUsuarios.length;i++){
			
			if(id == tiposUsuarios[i].getId()){
				if(tiposUsuarios[i].getCodigoExterno().equals(ETipoUsuario.ADMINISTRADOR_EMPRESA.getValue())){
					result=ETipoUsuario.ADMINISTRADOR_EMPRESA;break;
				}
				if(tiposUsuarios[i].getCodigoExterno().equals(ETipoUsuario.ADMINISTRADOR_EXPRECARDS.getValue())){
					result=ETipoUsuario.ADMINISTRADOR_EXPRECARDS;break;
				}
				if(tiposUsuarios[i].getCodigoExterno().equals(ETipoUsuario.EJECUTIVO_DE_CUENTA.getValue())){
					result=ETipoUsuario.EJECUTIVO_DE_CUENTA;break;
				}
				if(tiposUsuarios[i].getCodigoExterno().equals(ETipoUsuario.JEFE_CENTRO_DE_COSTO.getValue())){
					result=ETipoUsuario.JEFE_CENTRO_DE_COSTO;break;
				}		
			}
			
		}
		
		return result;
	}
	


	/**
	 * @return the userSessionBean
	 */
	public UserSessionBean getUserSessionBean() {
		return userSessionBean;
	}


	/**
	 * @param userSessionBean the userSessionBean to set
	 */
	public void setUserSessionBean(UserSessionBean userSessionBean) {
		this.userSessionBean = userSessionBean;
	}


	public ExpTbPg[] getTiposUsuarios() {
		return tiposUsuarios;
	}


	public void setTiposUsuarios(ExpTbPg[] tiposUsuarios) {
		this.tiposUsuarios = tiposUsuarios;
	}


	public List<SelectItem> getTiposUsuariosList() {
		return tiposUsuariosList;
	}


	public void setTiposUsuariosList(List<SelectItem> tiposUsuariosList) {
		this.tiposUsuariosList = tiposUsuariosList;
	}


	public List<SelectItem> getEstadosList() {
		return estadosList;
	}


	public void setEstadosList(List<SelectItem> estadosList) {
		this.estadosList = estadosList;
	}


	public String getPathContexto() {
		return pathContexto;
	}


	public void setPathContexto(String pathContexto) {
		this.pathContexto = pathContexto;
	}


	public String getPathArchivos() {
		return pathArchivos;
	}


	public void setPathArchivos(String pathArchivos) {
		this.pathArchivos = pathArchivos;
	}


	public List<SelectItem> getEmpresaList() {
		return empresaList;
	}


	public void setEmpresaList(List<SelectItem> empresaList) {
		this.empresaList = empresaList;
	}

}
